#include "MySet.h"
#include "MyMap.h"

// #define TestSTL

#ifdef TestSTL
#include <map>
#include <set>
#endif

int main()
{
    // std::set<int> s1;
    // s1.insert(10);
    // *(s1.begin()) = 10;
    // std::map<int, int> m;
    wk::set<int> s;
    s.insert(5);
    s.insert(2);
    s.insert(9);
    s.insert(4);
    s.insert(1);
    s.insert(3);
    s.insert(7);

    auto it = s.begin();
    while (it != s.end())
    {
        std::cout << *it << std::endl;
        it++;
    }

    // *it = 10; //不可修改，报错信息和使用标准库的set进行此操作时一样
    auto it11 = s.end();
    while (it != s.begin())
    {
        --it;
        std::cout << *it << std::endl;
    }

    std::cout << "+++++++++++++++++++++++++++++++++" << std::endl;
    wk::map<int, int> m;
    // int a = 1, b = 2;
    m.insert({1, 2});
    m.insert({3, 2});
    m.insert({4, 2});
    m.insert({5, 2});
    auto it1 = m.begin();
    while (it1 != m.end())
    {
        // it1->first = 10; //不可改
        // it1->second = 10; //可改
        std::cout << it1->first << " " << it1->second << std::endl;
        ++it1;
    }
    it1 = m.begin();
    m[10] = 10;
    while (it1 != m.end())
    {
        // it1->first = 10; //不可改
        // it1->second = 10; //可改
        std::cout << it1->first << " " << it1->second << std::endl;
        ++it1;
    }
    // auto it2 = m.end();
    // while (it1 != m.begin())
    // {
    //     --it1;
    //     std::cout << it1->first << " " << it1->second << std::endl;
    // }

    return 0;
}